package com.dj.product.k2faas.cluster.eventbus;

import java.util.concurrent.TimeUnit;

/**
 * Created by 丁建 on 2025/9/23 08:38
 *
 * @author 丁建
 */
public interface EventBus {
    /**
     * 发布一个构造好的领域事件
     *
     * @param event 直接将该对像作为领域事件发送
     */
    void publish(Object event);

    /**
     * 构造（构造逻辑方法）并发布事件
     *
     * @param sourceInfo 原始数据载体
     * @param eventClass 直接将该对像作为领域事件发送
     */
    void publish(Object sourceInfo, Class<?> eventClass);

    /**
     * 延迟发送一个事件
     *
     * @param event    直接将该对像作为领域事件发送
     * @param time     要延迟的时间
     * @param timeUnit 时间单位
     */
    void publish(Object event, int time, TimeUnit timeUnit);

    /**
     * 构造（构造逻辑方法）并发布事件
     *
     * @param sourceInfo 原始数据载体
     * @param eventClass 直接将该对像作为领域事件发送
     * @param time       要延迟的时间
     * @param timeUnit   时间单位
     */
    void publish(Object sourceInfo, Class<?> eventClass, int time, TimeUnit timeUnit);
}
